jak realizovat refresh? (Firebird)
Otázka od: bleak
1. 10. 2002 12:25
Mam svou hotovou aplikaci (USEP) a program Interbase WorkBench (IBW). Kdyz v
USEP zmenim zaznam v tabulce a v IBW udelam dotaz SQL, tak tam tu zmenu
vidim.
Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
(IBDatabase.Disconnect - Connect).
Jak asi Interbase WorkBench taha data z tabulky? Jak zjisti, ze musi provest
refresh a jak se refresh provede (je to metoda komponenty napr. IBDatabase?,
urcite to neni IbSQL.Refresh...)
Jede to lokalne, zkousel jsem i jakoby sitový provoz, ale pouze tak, ze jsem
zadal IbDatabase.Host:='127.0.0.1'
bleak
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.391 / Virová báze: 222 - datum vydání: 19.9.2002
Odpovedá: Martin Schayna
1. 10. 2002 15:46
----- Original Message -----
From: "bleak" <bleak@mvesely.com>
> Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
> neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
> (IBDatabase.Disconnect - Connect).
IBW neznam ale v mem oblibenem IBExpertu Personal se skoro vsechno musi
Commitovat.
Vsude kde to jen pripada v uvahu (a tedy i v dotazech) musis provest Commit,
abys videl zmeny pres jineho uzivatele.
Martin Schayna
Odpovedá: Pavel Cisar
1. 10. 2002 17:07
Haj hou!
On 1 Oct 2002 at 6:57, bleak wrote:
> Mam svou hotovou aplikaci (USEP) a program Interbase WorkBench (IBW). Kdyz v
> USEP zmenim zaznam v tabulce a v IBW udelam dotaz SQL, tak tam tu zmenu
> vidim.
>
> Kdyz zmenim zaznam v IBW a necham ten zaznam zobrazit v USEP, tak tam zmena
> neni videt (je tam puvodni obsah zaznamu). Az po novem spusteni programu
> (IBDatabase.Disconnect - Connect).
Ja bych sazel na odlisnosti v urovni izolace (parametru) transakce. IBW
zrejme pouziva read committed, zatimco vas program zrejme snapshot
(default) + commit retaining. Pokud se u snapshot transakce provadi
commit retaining (interne pouzivaji IBX pokud neni transakce rizena
explicitne a jinak) misto tvrdeho commit, pak se prenasi kontext
transakce a data potvrzena jinymi transakcemi nejsou videt. Je treba
pouzit tvrdy commit nebo jinou uroven izolace transakce.
S pozdravem
Pavel Cisar
Mobil: 0724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase
Odpovedá: bleak
2. 10. 2002 19:49
dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu provedu
IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne nactena
spravna (zmenena) data.
Ale nevim jestli je to spravne reseni.
bleak
> Ja bych sazel na odlisnosti v urovni izolace (parametru) transakce. IBW
> zrejme pouziva read committed, zatimco vas program zrejme snapshot
> (default) + commit retaining. Pokud se u snapshot transakce provadi
> commit retaining (interne pouzivaji IBX pokud neni transakce rizena
> explicitne a jinak) misto tvrdeho commit, pak se prenasi kontext
> transakce a data potvrzena jinymi transakcemi nejsou videt. Je treba
> pouzit tvrdy commit nebo jinou uroven izolace transakce.
>
> S pozdravem
> Pavel Cisar
Odpovedá: Lebeda David
4. 10. 2002 12:03
> dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu
> provedu IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne
> nactena spravna (zmenena) data. Ale nevim jestli je to spravne reseni.
>
IMHO neni. Problem ale neni v tom, jak co spravne nastavit, ale
(zda se mi) v nespravnem pouzivani transakci.
1) Povazuji za spravne, aby kazdy dataset mel vlastni komponentu
IBTransaction, pouze s vyjimkou pripadu, kdy programator opravdu
cilene chce delat SQL prikazy z vice datasetu pod jednou transakci.
2) Velmi casto ma smysl zmenit defaultni nastaveni IBTransaction.
Dvojklik na komponente, zvolit Read commited.
3) V souvislosti s bodem 2 je velmi ucelne se pokusit co nejvice
porozumet rizeni transakci v IB ci FB a jejich izolacnim urovnim,
zejmena ve vztahu k moznym konfliktum s ostatnimi transakcemi,
protoze jinak to bude jen pokusniceni s cernou skrinkou, a to neni
dobry zaklad pro kvalitni databazovou aplikaci.
4) Neni spatne vedet, ze pro transakce, v nichz probiha pouze
select, je mozne do parametru transakce pripsat slovo read, cimz se
ta transakce stane read only transakci (coz prakticky vylucuje
konflikt s jinou transakci a je mozne, ze takova transakce bude v
jistem smyslu uspornejsi).
David Lebeda
Odpovedá: Pavel Cisar
4. 10. 2002 10:59
Haj hou!
On 2 Oct 2002 at 17:04, bleak wrote:
> dekuji, nakonec jsem to vyresil tak, ze po provedenem SQL dotazu provedu
> IBTransaction.Disconnect. Pak jsou pri dalsim dotazu skutecne nactena
> spravna (zmenena) data.
> Ale nevim jestli je to spravne reseni.
To neni zrovna nejstastnejsi. Jednak Disconnect neni regulerni ukonceni
transakce, tim je Commit nebo Rollback. Disconnect ovsem u IBX provede
implicitni ukonceni transakce, jehoz typ se da nastavit v property
(tusim) DefaultAction (defaultne je to Commit). Shodou okolnosti je
vysledek prave takovy, jaky chcete, ale systemove spravne reseni to neni.
Doporucuji seznamit se podrobneji s problematikou transakci (nejen u
IB/FB), izolacnich urovni atd. a zaridit se podle toho.
S pozdravem
Pavel Cisar
Mobil: 0724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase